package com.yunpeng.aidevice.dao.service;

import com.yunpeng.aidevice.dao.model.entity.PermissionDO;
import com.yunpeng.aidevice.dao.model.relation.OrganizationPermissionDO;
import com.yunpeng.aidevice.dao.model.relation.RolePermissionDO;
import com.yunpeng.aidevice.dao.model.relation.UserOwnPermissionDO;

import java.util.Date;
import java.util.List;

/**
 * IPermissionService 权限服务
 *
 * @author : Moore(hemw)
 * @date : 2020-04-15
 */
public interface IPermissionService {
    /**
     * 根据权限代码获取权限实体
     *
     * @param permissionCode
     * @return
     */
    PermissionDO getByCode(String permissionCode);

    /**
     * 新增权限
     *
     * @param name         权限名称
     * @param operatorCode 操作人代码
     * @return
     */
    Boolean addNew(String name, String operatorCode);

    /**
     * 删除权限项
     *
     * @param permissionCode
     * @param operatorCode
     * @return
     */
    Boolean remove(String permissionCode, String operatorCode);

    /**
     * 禁用权限
     *
     * @param permissionCode
     * @param operatorCode
     * @return
     */
    Boolean disabled(String permissionCode, String operatorCode);

    /**
     * 启用权限
     *
     * @param permissionCode
     * @param operatorCode
     * @return
     */
    Boolean enabled(String permissionCode, String operatorCode);

    /**
     * 绑定用户权限关系的保存
     *
     * @param saveData
     * @return
     */
    Boolean bindUserPermission(UserOwnPermissionDO saveData);

    /**
     * 清除用户和权限绑定
     *
     * @param userCode
     * @param permissionCode
     * @return
     */
    Boolean unbindUserPermission(String userCode, String permissionCode);

    /**
     * 根据用户代码查询用户目前依然生效的权限绑定数据
     *
     * @param userCode 用户代码
     * @return
     */
    List<UserOwnPermissionDO> queryUserPermissionListByUser(String userCode);

    /**
     * 根据权限代码查询目前依然生效的权限绑定数据
     *
     * @param permissionCode 权限代码
     * @return
     */
    List<UserOwnPermissionDO> queryUserPermissionListByPermission(String permissionCode);

    /**
     * 根据角色代码查询目前生效的角色权限绑定数据
     *
     * @param roleCode 角色代码
     * @return
     */
    List<RolePermissionDO> queryRolePermissionListByRole(String roleCode);

    /**
     * 根据权限代码查询目前生效的角色权限绑定数据
     *
     * @param permissionCode 权限代码
     * @return
     */
    List<RolePermissionDO> queryRolePermissionListByPermission(String permissionCode);

    /**
     * 根据权限代码查询目前生效的组织权限绑定数据
     *
     * @param permissionCode 权限代码
     * @return
     */
    List<OrganizationPermissionDO> queryOrgPermissionListByPermission(String permissionCode);

    /**
     * 根据组织代码查询目前生效的权限绑定数据
     *
     * @param orgCode 组织机构代码
     * @return
     */
    List<OrganizationPermissionDO> queryOrgPermissionListByOrg(String orgCode);

    /**
     * 绑定权限到组织机构
     *
     * @param permissionCode 权限代码
     * @param orgCode        组织机构代码
     * @param startTime      起始生效时间
     * @param endTime        生效截止时间
     * @param operatorCode   操作人代码
     * @return
     */
    Boolean bindPermissionToOrg(String permissionCode, String orgCode, Date startTime, Date endTime, String operatorCode);

    /**
     * 解除组织机构权限绑定
     *
     * @param permissionCode 权限代码
     * @param orgCode        组织机构代码
     * @return
     */
    Boolean unbindPermissionFromOrg(String permissionCode, String orgCode);
}
